{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import the env_network from multi_user_network_env.py\n",
    "from multi_user_network_env import env_network\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "NUM_USERS = 3\n",
    "NUM_CHANNELS = 2\n",
    "ATTEMPT_PROB = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#initializing the environment\n",
    "env = env_network(NUM_USERS,NUM_CHANNELS,ATTEMPT_PROB)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 0 1]\n"
     ]
    }
   ],
   "source": [
    "# To sample random  actions from action_space\n",
    "action = env.sample()\n",
    "print action"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to take actions\n",
    "Here action = ``` [1 2 0] ``` means 1st channel will be accessed by user 1, 2nd channel will be accessed by user 2 and user 3 will not take any action. \n",
    "Since we have just sampled the actions uniformly for each user, now we have to take these actions .For that\n",
    "use ```env.step()``` function and pass these actions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(1, 1.0), (0, 0.0), (1, 1.0), array([0, 0], dtype=int32)]\n"
     ]
    }
   ],
   "source": [
    "obs = env.step(action)\n",
    "print obs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Observation Format\n",
    "\n",
    "For ```action = [1,2,0]``` obs is ```[(1, 1.0), (1, 1.0), (0, 0.0), array([0, 0], dtype=int32)]```\n",
    "\n",
    "The format  of obs is ```[(ACK1,REWARD1),(ACK2,REWARD2),(ACK3,REWARD3), ...,(ACKn,REWARDn) , (CAP_CHANNEL1,CAP_CHANNEL2,...,CAP_CHANNEL_k)]```.\n",
    "\n",
    "When we pass actions to the evironment , it takes these actions and returns the immediate reward as well as acknowledgement of the channel.Finally it also returns the residual capacity of the channel(remaining capacity).\n",
    "\n",
    "\n",
    "Here 1,2,3 represents user 1, user 2 and user 3 respectively for the first n tuples where n is number of users and k is number of channels.\n",
    "Last element is an array  ```[CAP_CHANNEL1, CAP_CHANNEL2, CAP_CHANNEL_k]``` denotes the remaining channel capacity or the fact that channel is available or not.\n",
    "\n",
    "Since both channels were available at the beginning , user 1 and 2 allocates channel 1 and 2 respectively and user 3 remains idle. This can be concluded by the resulting output where there is (ACK, REWARD) pair as ```(1 , 1.0)``` for user 1 and 2 and is ```(0 , 0.0)``` for user 3. \n",
    "Both the channels are allocated by user 1 and 2 therefore last element is ```array([0,0])```.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0, 0.0), (0, 0.0), (1, 1.0), array([1, 0], dtype=int32)]\n"
     ]
    }
   ],
   "source": [
    "# user 1 and 2 takes action 1 and user 3 takes action 2 \n",
    "action = np.array([1,1,2])\n",
    "obs = env.step(action)\n",
    "print obs\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also take our own actions.But first make sure to convert it to numpy array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.0, 1.0, 0.0]\n"
     ]
    }
   ],
   "source": [
    "# to take reward from obs\n",
    "rewards = [i[1] for i in obs[:NUM_USERS]]\n",
    "print rewards"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 1 1]\n",
      "[(0, 0.0), (0, 0.0), (0, 0.0), array([1, 1], dtype=int32)]\n",
      "0.0\n",
      "***************\n",
      "[1 1 0]\n",
      "[(0, 0.0), (0, 0.0), (0, 0.0), array([1, 1], dtype=int32)]\n",
      "0.0\n",
      "***************\n",
      "[2 2 0]\n",
      "[(0, 0.0), (0, 0.0), (0, 0.0), array([1, 1], dtype=int32)]\n",
      "0.0\n",
      "***************\n",
      "[1 1 2]\n",
      "[(0, 0.0), (0, 0.0), (1, 1.0), array([1, 0], dtype=int32)]\n",
      "1.0\n",
      "***************\n",
      "[2 2 0]\n",
      "[(0, 0.0), (0, 0.0), (0, 0.0), array([1, 1], dtype=int32)]\n",
      "0.0\n",
      "***************\n"
     ]
    }
   ],
   "source": [
    "TIME_SLOTS = 5\n",
    "total_rewards = []\n",
    "for i in range(TIME_SLOTS):\n",
    "    action = env.sample()\n",
    "    print action\n",
    "    obs = env.step(action)\n",
    "    print obs\n",
    "    rewards = [i[1] for i in obs[:NUM_USERS]]\n",
    "    reward_sum = np.sum(rewards)\n",
    "    print reward_sum\n",
    "    total_rewards.append(reward_sum)\n",
    "    print \"***************\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Lets take the action for 50 more time slots\n",
    "TIME_SLOTS = 50\n",
    "total_rewards = []\n",
    "for i in range(TIME_SLOTS):\n",
    "    action = env.sample()\n",
    "    #print action\n",
    "    obs = env.step(action)\n",
    "    #print obs\n",
    "    rewards = [i[1] for i in obs[:NUM_USERS]]\n",
    "    reward_sum = np.sum(rewards)\n",
    "    #print reward_sum\n",
    "    total_rewards.append(reward_sum)\n",
    "    #print \"***************\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4942de6c50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.arange(TIME_SLOTS), total_rewards,'r+')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The graph shows total reward generated per time_slot for 50 slots.\n",
    "\n",
    "Here reward ```0.0``` means no user was able to send the packet and both the channels were free while reward ```2.0``` means both the channels were being used without collision and any one user was not sending the packets.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
